package org.seckill.service;

import java.util.List;

import org.seckill.dto.Exposer;
import org.seckill.dto.SeckillExecution;
import org.seckill.entity.Seckill;
import org.seckill.exception.RepeatKillException;
import org.seckill.exception.SeckillCloseException;
import org.seckill.exception.SeckillException;

/**
 * 使用者，角度设计接口
 * 三个方面：方法定义粒度，参数（简练直接），返回类型（return 类型/异常）
 * @author Dwutian
 *
 */
public interface SeckillService {
	/**
	 *	返回所有商品
	 * @return
	 */
	public List<Seckill> getSeckillList();
	
	/**
	 *	 获取单个秒杀商品
	 * @param seckillid
	 * @return
	 */
	Seckill getById(long seckillid);
	
	/**
	 *	 秒杀开启时输出秒杀地址，
	 * 	否则输出系统时间和秒杀时间
	 * @param seckillid
	 */
	Exposer exportSeckillUrl(long seckillid);
	
	/**
	 * 	执行秒杀功能
	 * @param seckillid
	 * @param userPhone
	 * @param md5
	 * @return 
	 */
	SeckillExecution executeSeckill(long seckillid, long userPhone, String md5) 
			throws SeckillException, SeckillCloseException, RepeatKillException;
}
